package com.google.code.yargon.engine;

/**
 * </br>Item class</br>Various item properties and basically just getters and
 * setters for them
 * 
 * @author Tuomas Oinonen
 */

public class Item {
	/**
	 * Item name as an {@link String}
	 */
	private String name = "Anonymous Item";
	/**
	 * Items use type as an {@link usetype}
	 */
	private typeOfUse useType;
	/**
	 * Items position as an {@link typeOfPosition}
	 */
	private typeOfPosition position;
	/**
	 * Items type as an {@link typeOfItem}
	 */
	private typeOfItem type;
	/**
	 * Items side as an et {@link typeOfSide}
	 */
	private typeOfSide side = typeOfSide.BOTH;
	/**
	 * Items weight as an double
	 */
	private double weight;
	/**
	 * Items value as an int
	 */
	private int value;
	/**
	 * Items size as an int
	 */
	private int size;
	/**
	 * Items ranged damage as an int
	 */
	private int rangedDamage;
	/**
	 * Items melee damage as an int
	 */
	private int meleeDamage;
	/**
	 * Determines if Item is stackable
	 */
	private boolean stackable;

	public Item() {

	}

	/**
	 * Use types: </br>WEARABLE</br>WIELDABLE
	 */

	public enum typeOfUse {
		WEARABLE, WIELDABLE;
	}

	/**
	 * Position types:</br>HEAD</br>NECK</br>SHOULDER</br>TORSO</br> BACK
	 * </br>WAIST</br>LEG</br>WRIST</br>HAND</br>FINGER</br>FOOT</br>NONE
	 */

	public enum typeOfPosition {
		HEAD, NECK, SHOULDER, TORSO, BACK, WAIST, LEG, WRIST, HAND, FINGER, FOOT, NONE;
	}

	/**
	 * Item types:</br>AMULET</br>COMESTIBLE</br>GEM</br>RING</br>SPELLBOOK</br>
	 * TOOL </br>WEAPON</br>ARMOR</br>COIN</br>POTION</br>SCROLL</br>WAND</br>
	 * CONTAINER
	 */

	public enum typeOfItem {
		AMULET, COMESTIBLE, GEM, RING, SPELLBOOK, TOOL, WEAPON, ARMOR, COIN, POTION, SCROLL, WAND, CONTAINER;
	}

	/**
	 * Item values:</br>VALUABLE</br>WORTHLESS</br>FAKE
	 */
	public enum typeOfValue {
		VALUABLE, WORTHLESS, FAKE;
	}

	/**
	 * Item side:</br>LEFT</br>RIGHT</br>BOTH
	 */

	public enum typeOfSide {
		LEFT, RIGHT, BOTH;
	}

	/**
	 * @return {@link String} name
	 */
	public String getName() {
		return name;
	}

	/**
	 * Sets Item name as an {@link String}
	 * 
	 * @param Name
	 */
	public void setName(String Name) {
		this.name = Name;
	}

	/**
	 * @return {@link typeOfUse} userType
	 */
	public typeOfUse getUseType() {
		return useType;
	}

	/**
	 * Sets Item use type as an {@link setUseType}
	 * 
	 * @param UseType
	 */
	public void setUseType(typeOfUse UseType) {
		this.useType = UseType;
	}

	/**
	 * 
	 * @return {@link typeOfPosition} getPosition
	 */
	public typeOfPosition getPosition() {
		return position;
	}

	/**
	 * Sets Itep position on character as an {@link typeOfPosition}
	 * 
	 * @param Position
	 */
	public void setPosition(typeOfPosition Position) {
		this.position = Position;
	}

	/**
	 * 
	 * @return {@link getType} type
	 */
	public typeOfItem getType() {
		return type;
	}

	/**
	 * Set Item type as an {@link typeOfItem}
	 * 
	 * @param Type
	 */
	public void setType(typeOfItem Type) {
		this.type = Type;
	}

	/**
	 * 
	 * @return {@link typeOfSide} side
	 */
	public typeOfSide getSide() {
		return side;
	}

	/**
	 * Set Item side on character as an {@link typeOfSide}
	 * 
	 * @param Side
	 */
	public void setSide(typeOfSide Side) {
		this.side = Side;
	}

	/**
	 * 
	 * @return double weight
	 */
	public double getWeight() {
		return weight;
	}

	/**
	 * Set Item weight as an double
	 * 
	 * @param Weight
	 */
	public void setWeight(double Weight) {
		this.weight = Weight;
	}

	/**
	 * 
	 * @return int value
	 */
	public int getValue() {
		return value;
	}

	/**
	 * Sets Item value as an int
	 * 
	 * @param Value
	 */
	public void setValue(int Value) {
		this.value = Value;
	}

	/**
	 * 
	 * @return int size
	 */
	public int getSize() {
		return size;
	}

	/**
	 * Sets Item size as an int
	 * 
	 * @param Size
	 */
	public void setSize(int Size) {
		this.size = Size;
	}

	/**
	 * 
	 * @return int rangedDamage
	 */
	public int getRangedDamage() {
		return rangedDamage;
	}

	/**
	 * Sets Item ranged damage as an int
	 * 
	 * @param RangedDamage
	 */
	public void setRangedDamage(int RangedDamage) {
		this.rangedDamage = RangedDamage;
	}

	/**
	 * 
	 * @return int meleeDamage
	 */
	public int getMeleeDamage() {
		return meleeDamage;
	}

	/**
	 * Sets Item melee damage
	 * 
	 * @param MeleeDamage
	 */
	public void setMeleeDamage(int MeleeDamage) {
		this.meleeDamage = MeleeDamage;
	}

	/**
	 * 
	 * @return boolean stackable
	 */
	public boolean isStackable() {
		return stackable;
	}

	/**
	 * Sets if Items is stackable as an boolean
	 * 
	 * @param stackable
	 */
	public void setStackable(boolean stackable) {
		this.stackable = stackable;
	}

}
